home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 21 / CU Amiga Magazine's Super CD-ROM 21 (1998)(EMAP Images)(GB)[!][issue 1998-04].iso / CUCD / Programming / Python-1.4 / Source / Amiga / Python_netlib / set_socket_stdio.c < prev    next >
C/C++ Source or Header  |  1994-09-29  |  2KB  |  72 lines

  1. RCS_ID_C="$Id: set_socket_stdio.c,v 4.2 1994/09/30 00:35:04 jraja Exp $";
  2. /*
  3.  *      set_socket_stdio.c - redirect stdio to/from a socket
  4.  *
  5.  *      Copyright © 1994 AmiTCP/IP Group, 
  6.  *                       Network Solutions Development Inc.
  7.  *                       All rights reserved.
  8.  */
  9.  
  10. /****** net.lib/set_socket_stdio ****************************************
  11.  
  12.     NAME
  13.         set_socket_stdio - redirect stdio to/from a socket
  14.  
  15.     SYNOPSIS
  16.         int set_socket_stdio(int sock);
  17.  
  18.     FUNCTION
  19.         Redirect stdio (stdin, stdout and stderr) to/from socket 'sock'.
  20.         This is done by dup2()'ing 'sock' to the level 1 files underneath
  21.         the stdin, stdout and stderr.
  22.  
  23.     The original 'sock' reference is closed on successful return, so
  24.     the socket descriptor given as argument should not be used after
  25.         this function returns (successfully).
  26.  
  27.     RETURN VALUES
  28.         0 if successful, -1 on error. Global variable 'errno' contains
  29.         the specific error code set by the failing function.
  30.  
  31.     NOTES
  32.         This module pulls in the link library stdio modules.
  33.  
  34.     SEE ALSO
  35.         dup2()
  36. *****************************************************************************
  37. *
  38. */
  39.  
  40. #include <bsdsocket.h>
  41.  
  42. #include <stdio.h>
  43. #include <stdlib.h>
  44.  
  45. int
  46. set_socket_stdio(int sock)
  47. {
  48.   /*
  49.    * Replace the stdio with the sock
  50.    */
  51.   if (sock >= 0
  52.       && dup2(sock, fileno(stdin)) >= 0
  53.       && dup2(sock, fileno(stdout)) >= 0
  54.       && dup2(sock, fileno(stderr)) >= 0)
  55.     {
  56.       /* 
  57.        * line buffered mode
  58.        */
  59.       setvbuf(stdin, NULL, _IOLBF, 0);
  60.       setvbuf(stdout, NULL, _IOLBF, 0);
  61.       setvbuf(stderr, NULL, _IOLBF, 0);
  62.       /*
  63.        * Close the original reference to the sock if necessary
  64.        */
  65.       if (sock > fileno(stderr))
  66.     CloseSocket(sock);
  67.  
  68.       return 0;
  69.     }
  70.   return -1;
  71. }
  72.